from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from web.page_object.base_page import BasePage
from web.page_object.new_calendar_page import NewCalendarPage


class CalendarPage(BasePage):
    _location_add_icon = (By.CSS_SELECTOR, '.sidebar-more-trigger')

    def switch_data_mode(self):
        pass

    """
    常见问题：UI自动化测试过程中，如果出现报错no such element(找不到元素)，应如何解决？
        1.查看是否设置了隐式等待或强制等待，保证页面是加载出来的状态
        2.查看是否有iframe 或者windows,可以去进行切换
        3.在console使用js是否可以正常定位且点击
        4.如果以上均未实现，则需要检查定位是否写错
    """
    def goto_new_calendar_page(self):
        self.wait_click(self._location_add_icon)
        self.find(By.CSS_SELECTOR, '.sidebar-more-trigger').click()
        self.find(By.CSS_SELECTOR, '.sidebar-more-popup-item').click()
        return NewCalendarPage(self.driver)

    def get_calendar_by_name(self, calendar_name):
        try:
            # 通过文本查找元素是否存在，如果存在，那么就获取text，如果不存在会报错
            ele = self.find(By.XPATH, f"//*[text()='{calendar_name}']")
            return ele.text
        except:
            # 解决报错问题：添加异常捕获
            return False

    def delete_calendar_by_name(self, calender_name):
        calender_name_ele = self.find(By.XPATH, f"//*[text()='{calender_name}']")
        # 创建一个鼠标操作的对象
        action = ActionChains(self.driver)
        # 添加移动操作，并执行动作
        action.move_to_element(calender_name_ele).perform()
        # 通过文本查找日历，然后查找日历的爷爷元素；通过爷爷元素定位类名中包含unfollow的元素，也就是叉号。
        self.find(By.XPATH, f"//*[text()='{calender_name}']/../..//*[contains(@class,'unfollow')]").click()
        self.find(By.CSS_SELECTOR, '.uni-btn-theme-primary').click()
        # 返回当前实例本身，删除之后依然停留在日历页面
        return self
